The Business
Programs & Services is a cross-cutting collection of specialty programs that sit on top of the core membership system. Unlike a single feature module, P&S bundles multiple independent but complementary programs.
📋What Is Programs & Services?
Programs & Services is not a monolithic module—it's an ecosystem of specialty programs designed to increase member engagement, support contractor development, improve safety, and strengthen community. Each program operates with its own business logic, integrations, and data flows, but they all share the same UI presence within the AMS.
The seven programs are:
- AQC (Accredited Quality Contractor): Annual national certification recognizing quality contractors
- STEP (Safety Training Evaluation Process): Safety certification tracked nationally, with annual evaluation cycles
- Beam Club: Points-based recognition program for sponsor contribution; members progress through achievement levels
- Start-Up Contractor: Discounted dues structure for new contractors (being phased out but still supported)
- 15-for-12: Seasonal join offer: join in Oct/Nov/Dec, get 15/14/13 months for the price of 12
- Affinity Discount: Discount programs administered through affiliated organizations
- Find-a-Contractor: Directory sync from FindContractors.com to AMS company profiles
🎯Why These Programs Matter
Member Engagement & Retention: Programs & Services keep members engaged between renewal cycles. AQC and STEP offer recognition; Beam Club provides ongoing achievement targets; start-up discounts reduce friction for new members.
Chapter Operations: Chapters use P&S programs to support local initiatives. STEP reporting helps chapters identify safety leaders. Beam Club sponsor recognition strengthens company culture. Start-Up Contractor and 15-for-12 are powerful recruitment tools.
National Syncs & Data Quality: AQC and STEP data originate from National systems and sync into local AMS instances. This creates a critical testing surface: how do we handle read-only national data, yearly cycles, and discrepancies between local and national state?
Revenue & Billing Impact: Start-Up Contractor and 15-for-12 directly affect dues invoicing. A bug in these programs cascades into billing errors and chapter revenue loss.
While each program is largely independent, some interactions exist:
- Beam Club & Company Status: Points only accrue when the company is active and has a paid invoice. Archiving a sponsor retroactively doesn't erase their points.
- STEP & Member Eligibility: Only active individual members (not category 1 associates) can earn STEP levels. This couples STEP to the membership classification system.
- Start-Up Contractor & Year-Over-Year Dues: Year 3 hybrid rate triggers if member joined Feb-Dec; affects invoice generation in the following year.
- 15-for-12 & Auto $0 Invoices: When a member joins Oct/Nov/Dec under 15-for-12, the system auto-generates a $0 invoice for Jan 1 of the following year (to shift renewal to Dec 31).
How It Works
Technical flow and data syncs for each program. Understanding how data moves—from National to local, from UI to database, through invoice generation—is essential for test coverage.
AQC data comes from National. Local chapters receive a flat data file or webhook notification with accreditation status.
Data Flow:
Key Details:
- Accreditation is yearly (1/1 - 12/31 calendar year)
- Badge displays only for current year accreditation
- If member is not AQC: "No AQC history" message, with link to apply
- Data is read-only locally — edits happen at National, sync back to local
STEP is National data with local reporting. Data syncs in bulk, chapter can generate multiple export reports.
Data Sync:
Reporting & Exports: Chapters can export STEP data in two formats:
- STEP Export: All members with STEP certification
- No STEP Export: All members without STEP
Eligibility & Badge Logic:
- Only active individual members are eligible (category 1 associates are NOT)
- Badge shows the highest verified level across all years
- Type Disc field = STEP_inconsistent_with_dues (tracks data quality issues)
Beam Club is the most complex program: points accrue based on sponsors, levels are auto-awarded, prior points can be added manually.
Sponsor & Points Rules:
- Company can have up to 2 sponsors
- 1 sponsor = 1.0 point per year; 2 sponsors = 0.5 points each
- Points only accrue when: company is active + has a paid invoice + sponsor is designated
- Points are permanent—no year-end resets
Award Levels (Hard-Coded):
Level Assignment: Sponsor must be active individual at active company when they reach new level. Archived sponsors retain their points (no retroactive reduction).
Portal vs Admin: Chapter interface (admin) shows "Fulfill T-shirt," manage prior points. Portal (member-facing) shows sponsor name, level achievement, and Fulfillment Status (NULL/Ordered/Fulfilled).
Start-Up Contractor provides a discounted dues rate for new contractors in their first two (or three) years of membership. This program is being sunset but remains active.
Discount Structure:
- Year 1: Discounted rate (e.g., 50% of full dues)
- Year 2: Discounted rate (e.g., 75% of full dues)
- Year 3: Hybrid calculation—IF joined in Feb-Dec, apply a different rate; if joined Jan, full rate
Toggle Per Chapter: Chapters can enable/disable Start-Up Contractor pricing. When disabled, new contractors are invoiced at full rate.
Invoicing Impact: The rate selection happens during invoice generation. A bug in year-over-year tracking can cause incorrect invoices in Year 3.
15-for-12 is a seasonal promotion: join in Oct/Nov/Dec, get 15/14/13 months of membership for the price of 12. The system auto-generates a $0 invoice to shift the renewal date.
How It Works:
Invoice Generation: When 15-for-12 is enabled and a member joins in Oct/Nov/Dec, the system:
- Creates the initial paid invoice for the shortened period (Oct-Dec)
- Auto-generates a $0 invoice dated Jan 1 to "extend" the membership through Dec 31
- Sets renewal date to Dec 31 (instead of Oct/Nov/Dec of following year)
Chapter Toggle: Chapters can enable/disable 15-for-12. When disabled, members get standard 12-month invoices regardless of join month.
Find-a-Contractor syncs data from FindContractors.com into AMS company profiles. This is a one-way, outbound sync.
Data Flow:
Data Mapped: Phone number, website, service categories, availability, coverage area, etc. are updated in the AMS company record.
Sync Cadence: Typically hourly or daily (depends on chapter configuration).
Glossary
Key terms and definitions used throughout Programs & Services testing and operations.
AQC
Accredited Quality Contractor — annual national certification recognizing contractors who meet quality standards. Awarded by National, synced locally.
STEP
Safety Training Evaluation Process — national safety certification. Companies track level (Bronze/Silver/Gold/Platinum/Diamond), submission status, and verified dates.
Beam Club
Points-based recognition program. Sponsors earn points annually; companies reach milestone levels (Beam Club, Merit, Merit Plus, Presidential, Hall of Fame, Chair).
Beam Club Levels
Six hard-coded award tiers: Beam Club (5 pts), Merit (10), Merit Plus (15), Presidential (25), Hall of Fame (50), Chair (100).
Sponsor
Individual employee designated to earn Beam Club points for their company. Company can have up to 2 sponsors.
Point Accrual
Annual addition of Beam Club points to a sponsor when company is active and has paid invoice. 1 sponsor = 1.0 pt; 2 sponsors = 0.5 pts each.
Prior Points
Historical Beam Club points added manually (by chapter admin) for sponsors or years not captured by annual accrual logic.
Fulfillment Status
Beam Club T-shirt award status: NULL (not ordered), Ordered, or Fulfilled.
Start-Up Contractor
Discounted dues structure for new contractors in Year 1 & 2 (and Year 3 hybrid if joined Feb-Dec). Being phased out.
15-for-12
Seasonal join offer: Oct/Nov/Dec joiners get 15/14/13 months for the price of 12. Auto-generates $0 invoice to shift renewal date.
Prorate
Adjust invoice amount based on join date within a billing period (e.g., join mid-month, prorate to day-of-month).
Affinity Discount
Discount program administered through affiliated organizations (partners, sponsors). Synced to AMS company records.
Find-a-Contractor
Directory platform (FindContractors.com) that syncs company profile data into AMS for public-facing member directories.
National SQL Sync
Bulk data import from National systems (AQC, STEP) into local AMS. Typically one-way, read-only locally.
Webhook
HTTP callback that notifies AMS of data changes at National (e.g., new AQC accreditation, STEP level update).
Badge
Visual indicator on member portal (AQC accreditation, STEP level, Beam Club level) signifying achievement or certification status.
Test Strategy
Comprehensive testing approach across all sub-programs, National syncs, and reporting features.
🧪Multi-Program Coverage Philosophy
Programs & Services testing spans seven independent sub-programs, each with unique data flows, UI surfaces, and business logic. Rather than testing each in isolation, effective P&S testing must:
- Cover each program's happy path (basic CRUD, state transitions)
- Test National sync reliability (data arrival, conflict resolution, retry logic)
- Validate reporting exports (accuracy, performance, filtering)
- Check billing impact (invoice generation, discount application)
- Verify portal vs admin consistency
Test Objectives:
- Verify webhook/API receives National data correctly
- Check data mapping (National field → Local field)
- Validate read-only flag prevents local edits
- Test sync conflict resolution (e.g., local record already exists, do we overwrite?)
- Check retry logic on sync failure
- Validate badge display after sync
Test Data Prep:
- Stage test data in National system (or use mock webhook)
- Create corresponding local company/member records
- Trigger sync and verify local DB updates
- Check portal reflects updated badge/status
P&S features have dual interfaces: member-facing portal and chapter admin. Testing must cover both.
Portal (Member View):
- Badge display (AQC, STEP, Beam Club level)
- Read-only program status
- Sponsor name (if Beam Club member)
- Achievement history (e.g., "Reached Merit on Jun 2024")
Admin (Chapter Ops):
- Manage Beam Club sponsors
- Award T-shirts / update Fulfillment Status
- Add prior points
- Toggle Start-Up Contractor and 15-for-12 settings
- Generate exports (STEP, Affinity Discount)
Consistency Checks: If admin updates Beam Club sponsor, does portal show new sponsor name immediately? Do data filters on admin export match the data shown on portal?
Programs & Services generates multiple export types. Each export must be tested for accuracy, performance, and filtering.
Export Types:
- STEP Export (with STEP): All members with STEP certification; includes level, year, status
- No STEP Export: All members without STEP data
- Affinity Discount Report: Members enrolled in affinity programs
- Beam Club Report: Sponsors, points, levels, fulfillment status
- Start-Up Contractor List: Members in discount period, discount rate applied
Test Cases:
- Export with 5000+ records — does it timeout?
- Filter by year/level/status — are filters applied correctly?
- File format validation (CSV headers, escaping, encoding)
- Timestamp accuracy (when was export generated?)
- Download integrity (no truncation, all rows included)
Field-Level Validation:
- T-shirt size field (Beam Club) — only valid sizes accepted
- Date fields (Submitted, Verified) — timezone handling, null checks
- Level field (STEP, Beam Club) — only pre-defined levels allowed
State Consistency:
- If Fulfillment Status = "Fulfilled," do we prevent re-ordering?
- If sponsor is archived, can we still view historical points?
- If company is inactive, can new Beam Club points accrue? (Should not)
Type Disc (Data Inconsistency) Tracking: STEP records can have Type Disc = STEP_inconsistent_with_dues. Test that this field is populated when STEP data conflicts with dues membership status.
Business Rules & Gotchas
Critical business logic, edge cases, and common testing mistakes for each sub-program.
Rule 1: Read-Only Locally AQC data is owned by National. Local chapters cannot edit or create AQC records. If a chapter tries to manually update AQC status, the system should reject it.
Rule 2: Yearly Accreditation AQC is awarded for a calendar year (Jan 1 - Dec 31). On Jan 2 of the following year, if the company is not re-awarded, the badge disappears from the portal.
Rule 3: Badge Display Badge shows only for the current calendar year. If company was AQC in 2024 but not 2025, the 2024 badge should not display in 2025.
Rule 4: "No AQC History" Message If a company has never been AQC, or is not AQC in the current year, the portal shows "No AQC history" with a link to apply (if applicable).
Rule 5: Apply Link The "Apply for AQC" link routes to National's application system (external redirect).
Rule 1: Associate Member Eligibility Only active individual members can earn STEP levels. Category 1 associates (e.g., supplier members) are NOT eligible, even if they have STEP records from National. Test that a Category 1 member does not show a STEP badge.
Rule 2: 5 Data Points Per Year Each STEP record contains exactly: Year, Level, Date Submitted, Status (Submitted/Verified/Rejected), Date Verified. If a field is missing, the record is incomplete.
Rule 3: Badge = Highest Verified Level If a member has STEP Gold in 2023 (verified) and STEP Silver in 2024 (submitted, not verified), the badge shows Gold (highest verified level across all years).
Rule 4: Type Disc Tracking When STEP data is inconsistent with dues membership status (e.g., member has STEP but is inactive), set Type Disc = STEP_inconsistent_with_dues.
Rule 5: Export Filtering "STEP Export" shows members with any STEP record. "No STEP Export" shows members with no STEP history. A member with one rejected record still counts as "has STEP" for export purposes.
Rule 1: Max 2 Sponsors Per Company A company can designate up to 2 sponsors. Admin UI prevents adding a 3rd. Attempting to do so should fail with a validation error.
Rule 2: Point Accrual Math Annual accrual happens when all conditions are met:
- Company is active
- Company has a paid invoice (not pending, not failed)
- Sponsor is designated (not undesignated/archived)
- If 1 sponsor: 1.0 point; if 2 sponsors: 0.5 each
Rule 3: Points Are Permanent Once accrued, points never decrease. Even if a sponsor is undesignated or a company becomes inactive, points from prior years remain.
Rule 4: Award Levels (Hard-Coded) Thresholds are: 5, 10, 15, 25, 50, 100 points. When sponsor's points cross a threshold, they are awarded the level. If a sponsor has 12 points, they reach Merit (10) but not Merit Plus (15).
Rule 5: Sponsor Eligibility for Level Award When a sponsor reaches a new level, they must be an active individual at an active company at that moment. If the sponsor is archived before reaching the threshold, the level is not awarded retroactively.
Rule 6: Archived Sponsors Retain Points Archiving a sponsor does not erase their points. If a sponsor reaches Merit then gets archived, their 10 points persist. They do not accrue additional points (because they're archived), but prior points are not lost.
Rule 7: Prior Points Chapter admins can manually add points to a sponsor for historical years or special recognition. This bypasses the accrual logic and directly updates the points total.
Rule 1: Year Identification System tracks which year a Start-Up Contractor member is in based on join date. Year 1 = join year. Year 2 = year after join. Year 3 = second year after join.
Rule 2: Year 1 & 2 Rates If member is in Year 1 or Year 2 (as of invoice date), apply the Start-Up Contractor discount rate (not the full rate).
Rule 3: Year 3 Hybrid Logic In Year 3, the discount depends on join month:
- If joined Jan: Full rate (no discount)
- If joined Feb-Dec: Hybrid rate (discounted, but not as much as Year 1/2)
Rule 4: Chapter Toggle Chapters can enable/disable Start-Up Contractor. When disabled, all members (including existing Start-Up Contractor members) are invoiced at full rate going forward.
Rule 5: Retroactive vs Prospective Disabling the toggle affects future invoices, not past ones. A member invoiced at discount in Year 2 will not be retroactively billed at full rate.
Rule 1: Eligibility by Join Month 15-for-12 applies only to members who join in Oct, Nov, or Dec.
Rule 2: Membership Length
- Join Oct: 15 months of membership (Oct + 14 months)
- Join Nov: 14 months of membership (Nov + 13 months)
- Join Dec: 13 months of membership (Dec + 12 months)
Rule 3: Price Calculation Price is for 12 months, regardless of join month. So a Oct joiner pays 12-month price for 15 months of coverage.
Rule 4: Auto-$0 Invoice After the initial paid invoice (for Oct-Dec), the system auto-generates a $0 invoice dated Jan 1 (following year). This extends the membership through Dec 31.
Rule 5: Renewal Date Shift The member's renewal date becomes Dec 31 (not Oct/Nov/Dec of the following year). This ensures consistent Dec-end renewals across the chapter.
Rule 6: Chapter Toggle Chapters can enable/disable 15-for-12. When disabled, Oct/Nov/Dec joiners get standard 12-month invoices.
Affinity Discount Rule 1: Enrollment Members enroll in affinity programs (e.g., "Partner XYZ Discount"). Enrollment status is synced to the AMS from the partner system.
Affinity Discount Rule 2: Discount Application When a member with active affinity enrollment pays a renewal invoice, the discount is applied (if enabled by the chapter).
Find-a-Contractor Rule 1: One-Way Sync Data flows from FindContractors.com → AMS. Local edits to company profile may be overwritten on next sync.
Find-a-Contractor Rule 2: Mapped Fields Only certain fields sync: phone, website, service categories, availability. Other fields (address, contact name) may not sync.
Find-a-Contractor Rule 3: Idempotence Multiple syncs of the same data should not create duplicates or corrupted records. If the same company syncs twice, update the existing record, don't create a new one.
Scenario Thinking
Complex, multi-step scenarios that test interactions across programs and edge cases.
Setup: ABC Company has Sponsor A (10 points, at Merit level). Sponsor A leaves the company.
Action: Chapter admin undesignates Sponsor A and designates Sponsor B (0 points initially).
Expected Outcomes:
- Sponsor A's 10 points are archived (retained, but not shown as "current")
- Sponsor B starts accruing from 0 next year
- Report shows Sponsor A's prior points separately (if "include history" option is enabled)
- Portal shows new sponsor name (Sponsor B), not Sponsor A
Testing Edge: What if Sponsor A's email is still in the system? Does the badge show under their old account? Does portal history show both sponsors?
Setup: Company has STEP records for 2022, 2023, 2024:
- 2022: Silver (Verified)
- 2023: Gold (Verified)
- 2024: Platinum (Submitted, awaiting verification)
Expected Outcomes:
- Badge shows Gold (highest verified level)
- Export includes all three years of data
- Member can see achievement history on portal
- If 2024 Platinum is rejected: badge still shows Gold; 2024 record marked as rejected
Testing Edge: If National updates the 2023 record from "Verified" to "Rejected," does the badge re-calculate to Silver? Do exports update correctly?
Setup: Member joins Feb 1, 2023 (Year 1). Chapter has Start-Up Contractor enabled.
Invoicing Timeline:
- Feb 1, 2023 - Jan 31, 2024: Year 1 rate (50% of full)
- Feb 1, 2024 - Jan 31, 2025: Year 2 rate (75% of full)
- Feb 1, 2025 - Jan 31, 2026: Year 3 hybrid rate (because joined Feb, not Jan)
Expected Outcomes:
- Invoice dated Feb 1, 2025 shows hybrid rate, not full rate
- If chapter disables Start-Up Contractor on Feb 15, 2025, the Feb 1 invoice already processed at hybrid. Future invoices (Mar 1, Apr 1) are at full rate.
Testing Edge: What if a member joins Feb 1, 2023, then is archived for 1 month, then reactivated? Does the system still recognize Year 3 status based on original join date?
Setup: Member joins Nov 15, 2025. Chapter has 15-for-12 enabled. Standard membership term = 12 months (anniversary date = join date + 12 months).
Expected Invoices:
- Invoice 1: Nov 15, 2025 - Dec 31, 2025 (prorated, paid)
- Invoice 2: Jan 1, 2026 - Dec 31, 2026 ($0 invoice)
Expected Renewal Date: Dec 31, 2026 (not Nov 15, 2026)
Expected Outcomes:
- Portal shows renewal date as Dec 31, 2026
- Export reports include both invoices (one paid, one $0)
- Total membership span: Nov 15, 2025 - Dec 31, 2026 (14 months)
- If member is invoiced again on Jan 1, 2027, it should be at the full rate (new cycle)
Testing Edge: What if the member pays the Nov 15 invoice late (Dec 20)? Is the $0 invoice still auto-generated, or does the system check if the paid invoice was completed first?
Setup: Sponsor A at ABC Company has 12 points (Merit level). Company is active and has paid invoice.
Action: Annual point accrual runs. Sponsor A accrues 1 point (1 sponsor = 1.0 pt), reaching 13 points.
Expected Outcomes:
- Sponsor A does not reach Merit Plus (15 points) yet
- Badge still shows Merit
- Points are recorded in DB as 13
- If accrual happens again next year (+1 pt = 14 total), still Merit
- If accrual happens again next year (+1 pt = 15 total), Sponsor A reaches Merit Plus
Testing Edge: What if prior points are added manually? If chapter admin adds 2 prior points to Sponsor A (bringing total to 14), and then the automatic accrual runs (+1), does the system reach 15 and award Merit Plus? Or does it skip the award because the admin-added points were manual?
Regression Checklists
Organized test checklists for each sub-program. Use these as starting points for regression test planning.
- National sync webhook received and processed
- AQC badge displays on portal for current year accreditation
- AQC badge does NOT display for prior year accreditation
- "No AQC history" message displays when member is not accredited
- "Apply for AQC" link routes to National application system
- Chapter admin cannot manually edit AQC records (read-only enforcement)
- On Jan 2 of new calendar year, badge disappears if no current-year accreditation
- Sync conflict resolution: if local record exists, update vs. create logic is correct
- Export includes AQC status field accurately
- Portal search by "AQC" filter returns only accredited members
- National sync bulk import processes without timeout or data loss
- Each STEP record contains all 5 data points (Year, Level, Date Submitted, Status, Date Verified)
- STEP badge displays for active individual members only (not category 1 associates)
- Badge shows highest verified level across all years
- Badge does NOT show for submitted (unverified) levels if higher verified level exists
- Type Disc field = STEP_inconsistent_with_dues is set correctly
- "STEP Export" includes all members with any STEP record (including rejected)
- "No STEP Export" includes members with zero STEP records
- Export filtering by year/level/status produces correct results
- Large export (5000+ records) completes in < 30 sec
- Chapter admin cannot edit STEP records (read-only enforcement)
- Stale STEP data (sync from prior year) is replaced by new sync, not duplicated
- Admin can designate up to 2 sponsors; 3rd sponsor rejected
- Point accrual: company active + paid invoice + sponsor designated → 1.0 pt (1 sponsor) or 0.5 each (2 sponsors)
- Point accrual: company inactive → no points accrued
- Point accrual: no paid invoice → no points accrued
- Points accrued are permanent (never decrease)
- Sponsor undesignation prevents future accrual but retains past points
- Sponsor archival prevents future accrual but retains past points
- Award level thresholds: 5 (Beam Club), 10 (Merit), 15 (Merit Plus), 25 (Presidential), 50 (Hall of Fame), 100 (Chair)
- Sponsor reaches level only if active individual at active company
- Prior points can be added manually by admin (bypasses accrual logic)
- T-shirt size field validation (only valid sizes accepted)
- Fulfillment Status (NULL/Ordered/Fulfilled) can be updated by admin
- Fulfillment Status = Fulfilled prevents re-ordering
- Portal displays sponsor name, level, fulfillment status correctly
- Admin report shows sponsors, points, levels, fulfillment status
- Sponsor archival → prior points visible in "history" section if enabled
- Export: Beam Club data includes sponsor name, points, current level
- Year 1 invoice applies Year 1 discount rate
- Year 2 invoice applies Year 2 discount rate
- Year 3 invoice applies full rate if joined in Jan
- Year 3 invoice applies hybrid rate if joined Feb-Dec
- Chapter can toggle Start-Up Contractor on/off
- When disabled, future invoices use full rate (regardless of join year)
- Toggle disabling is prospective (does not retroactively change past invoices)
- Invoice line item shows applied rate/discount percentage
- Report: Start-Up Contractor list shows members in discount period with rate applied
- After 3 years (or Year 3 full rate if joined Jan), member no longer marked as Start-Up Contractor
- Oct joiner: membership = Oct + 14 months (15 total); charged 12-month price
- Nov joiner: membership = Nov + 13 months (14 total); charged 12-month price
- Dec joiner: membership = Dec + 12 months (13 total); charged 12-month price
- Auto-$0 invoice generated for Jan 1 (following year)
- $0 invoice is visible in invoice list and export
- Renewal date = Dec 31 (not Oct/Nov/Dec of following year)
- Chapter can toggle 15-for-12 on/off
- When disabled, Oct/Nov/Dec joiners get standard 12-month invoices
- Toggle disabling is prospective (already-generated $0 invoices remain)
- If first invoice is paid late (after Jan 1), is $0 invoice still generated?
- Portal renewal date display is correct (Dec 31)
- Export: 15-for-12 status and renewal date reported accurately
- Affinity enrollment syncs from partner system correctly
- Discount is applied to renewal invoice if member has active affinity enrollment
- If chapter disables affinity discount, future invoices no longer include discount
- Report: affinity discount list shows members with active enrollment and discount applied
- Affinity enrollment status is accurately reflected on member portal profile
- FindContractors.com data syncs into AMS company profile correctly
- Mapped fields (phone, website, services, etc.) are updated in AMS
- Sync is idempotent: same data synced twice does not create duplicates
- If company deletes FindContractors profile, is AMS record cleared or marked inactive?
- Sync failure does not corrupt local data or create orphaned records
- Portal company directory reflects synced Find-a-Contractor data
- Sync cadence (hourly/daily) is consistent and monitored
Environment & Data Setup
Test environment prerequisites, test data requirements, and setup procedures for each program.
Prerequisites:
- Test instance of National system (or mock webhook endpoint)
- API credentials/credentials for National sync service
- Test company/member records in both National and local AMS
- Webhook receiver configured in local AMS to accept National events
Test Data Needs (AQC):
- 5 test companies with AQC status "accredited" for current year
- 3 test companies with AQC status "not accredited"
- 2 test companies with prior-year AQC (to verify badge disappears on Jan 2 of new year)
Test Data Needs (STEP):
- 5 companies with multi-year STEP records (2022, 2023, 2024)
- Mixed STEP levels (Bronze, Silver, Gold, Platinum, Diamond)
- Mixed status (Submitted, Verified, Rejected)
- 3 companies with no STEP records (for "No STEP Export" testing)
- 2 companies with category 1 associates (to verify ineligibility)
Data Requirements:
- 5 test companies, each with active status and paid invoice
- 10 test individuals to assign as sponsors
- Companies with 1 sponsor, 2 sponsors, and no sponsors
- Sponsors at different point levels (5, 10, 15, 25, 50, 100 points)
- Archived sponsors with prior points (to test retention)
- Test records with manually added prior points
- T-shirt fulfillment test data (NULL, Ordered, Fulfilled status)
Setup Procedure:
- Create 5 active companies, each with one paid invoice
- Assign sponsors and manually set points to specific thresholds
- For 2 of the companies, archive prior sponsors and designate new ones
- Set fulfillment statuses on some records to test state transitions
- Verify point accrual calculation on a test company (add it to invoice, verify accrual next run)
Data Requirements:
- Test company joined Jan 2024 (to test Year 1, 2, 3 progression)
- Test company joined Feb 2024 (to test Year 3 hybrid rate)
- Test company joined Dec 2024 (to test Year 3 full rate if joined Jan logic)
- Chapter with Start-Up Contractor enabled
- Chapter with Start-Up Contractor disabled
Setup Procedure:
- Create three test companies with specific join dates
- Generate invoices for each across multiple years
- Verify rates applied match expected Year 1, 2, or 3 rates
- Toggle program off and generate new invoices; verify full rate applied
Data Requirements:
- Test member joins Oct 15 (to test 15-month span and $0 invoice)
- Test member joins Nov 15 (to test 14-month span)
- Test member joins Dec 15 (to test 13-month span)
- Test member joins Jan 15 (to test NOT eligible for 15-for-12)
- Chapter with 15-for-12 enabled
- Chapter with 15-for-12 disabled
Setup Procedure:
- Create four test members with join dates in different months
- Generate invoices for each; verify paid invoice and $0 invoice created (for Oct/Nov/Dec joiners)
- Check renewal dates are Dec 31 for Oct/Nov/Dec joiners
- For Jan joiner, verify standard 12-month invoice (no $0 invoice)
- Disable 15-for-12 and verify new joiners get standard invoices
Prerequisites:
- Test account in FindContractors.com (or mock API endpoint)
- Sync integration configured in AMS (URL, credentials, schedule)
- Webhook receiver for sync notifications (optional)
Test Data Needs:
- 5 test companies in FindContractors.com with profile data (phone, website, services)
- Corresponding company records in AMS (name match for sync to work)
- Companies with complete profiles and incomplete profiles (to test partial syncs)
- One company with no AMS record (to test sync error handling)
Setup Procedure:
- Create test companies in both FindContractors.com and AMS
- Trigger initial sync and verify data flows correctly
- Update a company profile in FindContractors.com, trigger sync again
- Verify data is updated (not duplicated) in AMS
- Delete a company in FindContractors.com, trigger sync
- Verify AMS handles deletion (clear fields, mark inactive, etc.)
Programs & Services settings are configured at the chapter level:
- Start-Up Contractor: Enable/Disable (default varies by chapter)
- 15-for-12: Enable/Disable (default varies by chapter)
- Affinity Discount: Enable/Disable, partner selection
- Beam Club: Enable/Disable (typically always enabled)
- AQC/STEP Syncs: Sync frequency, data mapping
- Find-a-Contractor: Sync frequency, field mapping
Test Requirement: Regression tests must cover both enabled and disabled states for each toggleable program. Verify settings persist across restarts and are applied correctly during invoice generation.